#include<bits/stdc++.h>
using namespace std;

class MinStack {
public:
    stack<int> a, b;
    /** initialize your data structure here. */
    MinStack() {
        a = b = stack<int>();
    }
    
    void push(int x) {
        a.push(x);
        if(b.empty() || x <= b.top())b.push(x); // 注意这里的 b.empty() 和 后面的 '<=' 号，都是容易 RE 的地方。
    }
    
    void pop() {
        if(a.top() == b.top())b.pop();
        a.pop();
    }
    
    int top() {
        return a.top();
    }
    
    int min() {
        return b.top();
    }
};

/**
 * 2021.9.27
 * a 是真正的栈
 * b 是辅助的单调栈，越往栈顶越小
 */